const vscode = require('vscode');

// 定义一个正则表达式来匹配 "ezOne-" 后跟一个或多个数字
const EZONE_REGEX = /ezOne-(\d+)/;

/**
 * 注册 ezOne 的 Code Actions 提供者
 * @returns {vscode.Disposable}
 */
function registerEzOneCodeActionsProvider() {
    return vscode.languages.registerCodeActionsProvider(
        { scheme: 'file', language: '*' }, // 匹配所有文件类型，您可以根据需要限定
        new EzOneCodeActionsProvider(),
        {
            providedCodeActionKinds: [vscode.CodeActionKind.QuickFix] // *** 改变这里：从 Refactor 改为 QuickFix ***
        }
    );
}

class EzOneCodeActionsProvider {
    /**
     * 为给定的范围和上下文提供 Code Actions
     * @param {vscode.TextDocument} document
     * @param {vscode.Range} range
     * @param {vscode.CodeActionContext} context
     * @param {vscode.CancellationToken} token
     * @returns {vscode.ProviderResult<(vscode.Command | vscode.CodeAction)[]>}
     */
    provideCodeActions(document, range) {
        const editor = vscode.window.activeTextEditor;
        if (!editor) {
            return;
        }

        const line = editor.document.lineAt(range.start.line);
        const match = line.text.match(EZONE_REGEX);

        if (match) {
            const ezOneNumber = match[1]; // 提取匹配到的编号
            const actions = [];

            // --- 新增：添加 "查看 ezOne 选项" Code Action ---
            const showOptionsAction = new vscode.CodeAction('卡片操作...'); // *** 改变这里：从 Refactor 改为 QuickFix ***
            showOptionsAction.command = {
                command: 'extension.showEzOneOptions', // 调用 linkProvider.js 中注册的命令
                title: '查看 ezOne 选项',
                arguments: [ezOneNumber] // 传递 ezOne 编号作为参数
            };
            actions.push(showOptionsAction);

            // 添加 "设置状态" Code Action
            const setStateAction = new vscode.CodeAction('设置状态'); // *** 改变这里：从 Refactor 改为 QuickFix ***
            setStateAction.command = {
                command: 'extension.setEzOneState', // 自定义命令
                title: '设置 ezOne 状态',
                arguments: [ezOneNumber, line.lineNumber] // 传递编号和行号
            };
            actions.push(setStateAction);

            return actions;
        }
        return [];
    }
}

// 导出注册函数
module.exports = {
    registerEzOneCodeActionsProvider
};